package Project;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Scanner;

import top.college.dao.JDBC_SQL;
import top.college.dao.JDBC_ConnClose;
import top.college.model.ProfessorVO;
import top.college.screen.LoginMain;
import top.college.screen.ProfessorMain;

public class ReProfessorUpdate {
	static ReProfessorVO pv = new ReProfessorVO();
	static ReJDBC_SQL sql = new ReJDBC_SQL();
	static StringBuilder sb = new StringBuilder();
	static Scanner sc = new Scanner(System.in);
	static Connection conn = null;
	static PreparedStatement pstmt = null;
	static ResultSet rs = null;
	static String logId = ReLoginMain.logIdVO;
	static String add = null;
	static String addv = null;
	static boolean b = true;
	
	public static void updateProfessor() {
		while ( b ) {
			System.out.print("수정하실 교수번호를 입력하세요 : ");
			add = sc.next();
			try {
				conn = ReJDBC_ConnClose.openDataBase();
				pstmt = conn.prepareStatement(sql.ProfessorSelectAllSQL);
				pstmt.setString( 1, add );
				rs = pstmt.executeQuery();
				if ( rs.next() ) {
					do {
						pv.setProf_tr(rs.getString( 1 ));
						pv.setProf_no(rs.getString( 2 ));
						pv.setProf_pw(rs.getString( 3 ));
						pv.setProf_name(rs.getString( 4 ));
						pv.setProf_tel(rs.getString( 5 ));
						pv.setProf_addr(rs.getString( 6 ));
						pv.setProf_office(rs.getString( 7 ));
						pv.setReg_date(rs.getString( 8 ));
					} while ( rs.next() );
					b = false; break;
				} else { System.out.println("존재하지 않는 교수 번호입니다. 다시 입력해주세요"); }
			} catch ( Exception e ) {
				e.printStackTrace();
			} finally {
				ReJDBC_ConnClose.closeDataBase(conn, pstmt, rs);
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 비밀번호를 변경하시겠습니까? [ Y / N ]");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				while ( b ) {
					System.out.print("이전에 사용중이던 비밀번호를 입력하세요 : ");
					addv = sc.next();
					try {
						conn = ReJDBC_ConnClose.openDataBase();
						pstmt = conn.prepareStatement( sql.ProfessorUpdateSQL );
						pstmt.setString( 1, add );
						rs = pstmt.executeQuery();
						if  ( rs.next() ) {
							if ( addv.equals( rs.getString(3)) ) {
								while ( b ) {
									System.out.print("변경하실 비밀번호를 입력하세요 : ");
									pv.setProf_pw( sc.next() );
									if  ( pv.getProf_pw().equals( add ) ) {
										System.out.println("아이디와 동일한 비밀번호는 사용하실 수 없습니다. 다시 입력해주세요");
									} else { b = false; break; }
								}
							} else {
								System.out.println("비밀번호를 잘못 입력하셨습니다. 다시 확인해주세요");
							}
						} else {  }
					} catch ( Exception e ) {
						e.printStackTrace();
					} finally {
						ReJDBC_ConnClose.closeDataBase(conn, null, rs);
					}
				}
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 이름을 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 교수 이름을 입력하세요 : ");
				pv.setProf_name( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default : 
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 연락처를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 연락처를 입력하세요 : ");
				pv.setProf_tel( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 주소를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 주소를 입력하세요 : ");
				pv.setProf_addr( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 사무실 정보를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 사무실 정보를 입력하세요 : ");
				pv.setProf_office( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		System.out.println( pv.toString() );
		b = true;
		while ( b ) {
			System.out.println("저장하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				try {
					conn = ReJDBC_ConnClose.openDataBase();
					pstmt = conn.prepareStatement(sql.ProfessorUpdateSQL);
					pstmt.setString( 1, pv.getProf_pw() );
					pstmt.setString( 2, pv.getProf_name() );
					pstmt.setString( 3, pv.getProf_tel() );
					pstmt.setString( 4, pv.getProf_addr() );
					pstmt.setString( 5, pv.getProf_office() );
				} catch ( Exception e ) {
						e.printStackTrace();
				} finally {
					ReJDBC_ConnClose.closeDataBase(conn, pstmt, rs);
				}
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("다른 교수 정보를 수정하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.println("교수 정보를 추가 수정합니다.");
				sb = new StringBuilder();
				updateProfessor();
			case "N" : case "n" :
				System.out.println("교수 관련 업무 화면으로 이동합니다.");
				sb = new StringBuilder();
				ReProfessorMain.ProfessorAdminScreen();
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
	}
	
	public static void updateSubProfessor() {
		try {
			conn = ReJDBC_ConnClose.openDataBase();
			pstmt = conn.prepareStatement(sql.ProfessorSelectAllSQL);
			pstmt.setString( 1, logId );
			rs = pstmt.executeQuery();
			while ( rs.next() ) {
				pv.setProf_tr(rs.getString( 1 ));
				pv.setProf_no(rs.getString( 2 ));
				pv.setProf_pw(rs.getString( 3 ));
				pv.setProf_name(rs.getString( 4 ));
				pv.setProf_tel(rs.getString( 5 ));
				pv.setProf_addr(rs.getString( 6 ));
				pv.setProf_office(rs.getString( 7 ));
				pv.setReg_date(rs.getString( 8 ));
			} 
		} catch ( Exception e ) {
			e.printStackTrace();
		} finally {
			ReJDBC_ConnClose.closeDataBase(conn, pstmt, rs);
		}
		while ( b ) {
			System.out.print("교수 비밀번호를 변경하시겠습니까? [ Y / N ]");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				while ( b ) {
					System.out.print("이전에 사용중이던 비밀번호를 입력하세요 : ");
					addv = sc.next();
					try {
						conn = ReJDBC_ConnClose.openDataBase();
						pstmt = conn.prepareStatement( sql.ProfessorSelectAllSQL );
						pstmt.setString( 1, logId );
						rs = pstmt.executeQuery();
						if  ( rs.next() ) {
							if ( addv.equals( rs.getString(3)) ) {
								while ( b ) {
									System.out.print("변경하실 비밀번호를 입력하세요 : ");
									pv.setProf_pw( sc.next() );
									if  ( pv.getProf_pw().equals( logId ) ) {
										System.out.println("아이디와 동일한 비밀번호는 사용하실 수 없습니다. 다시 입력해주세요");
									} else { b = false; break; }
								}
							} else {
								System.out.println("비밀번호를 잘못 입력하셨습니다. 다시 확인해주세요");
							}
						} else {  }
					} catch ( Exception e ) {
						e.printStackTrace();
					} finally {
						ReJDBC_ConnClose.closeDataBase(conn, null, rs);
					}
				}
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 이름을 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 교수 이름을 입력하세요 : ");
				pv.setProf_name( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default : 
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 연락처를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 연락처를 입력하세요 : ");
				pv.setProf_tel( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 주소를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 주소를 입력하세요 : ");
				pv.setProf_addr( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		b = true;
		while ( b ) {
			System.out.print("교수 사무실 정보를 변경하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				System.out.print("변경하실 사무실 정보를 입력하세요 : ");
				pv.setProf_office( sc.next() );
				b = false; break;
			case "N" : case "n" :
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
		System.out.println( pv.toString() );
		b = true;
		while ( b ) {
			System.out.println("저장하시겠습니까? [ Y / N ] : ");
			switch ( sc.next() ) {
			case "Y" : case "y" :
				try {
					conn = ReJDBC_ConnClose.openDataBase();
					pstmt = conn.prepareStatement(sql.ProfessorUpdateSQL);
					pstmt.setString( 1, pv.getProf_pw() );
					pstmt.setString( 2, pv.getProf_name() );
					pstmt.setString( 3, pv.getProf_tel() );
					pstmt.setString( 4, pv.getProf_addr() );
					pstmt.setString( 5, pv.getProf_office() );
					System.out.println("저장이 완료되었습니다.");
					System.out.println("초기 화면으로 이동합니다.");
					ReProfessorMain.ProfessorScreen();
				} catch ( Exception e ) {
						e.printStackTrace();
				} finally {
					ReJDBC_ConnClose.closeDataBase(conn, pstmt, rs);
				}
			case "N" : case "n" :
				System.out.println("업무가 취소 되었습니다.");
				System.out.println("초기 화면으로 이동합니다.");
				ReProfessorMain.ProfessorScreen();
				b = false; break;
			default :
				System.out.println("잘못 입력하셨습니다. 다시 입력해주세요");
			}
		}
	}
}